package com.ruoyi.coffee.domain;

import java.math.BigDecimal;
import java.util.Date;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;

/**
 * 优惠券信息对象 cf_coupon
 *
 * @author dxj
 * @date 2025-01-08
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("cf_coupon")
public class Coupon extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 优惠券唯一标识符
     */
    private Long couponId;

    /**
     * 优惠券名称
     */
    @Excel(name = "优惠券名称")
    private String couponName;

    /**
     * 折扣类型（percentage: 打折, amount: 满减）
     */
    @Excel(name = "折扣类型", readConverterExp = "p=ercentage:,打=折,,a=mount:,满=减")
    private String discountType;

    /**
     * 折扣值（如果是打折，则表示折扣百分比；如果是满减，则表示满减金额）
     */
    @Excel(name = "折扣值", readConverterExp = "如=果是打折，则表示折扣百分比；如果是满减，则表示满减金额")
    private BigDecimal discountValue;

    /**
     * 使用该优惠券所需的最低订单金额（仅当discount_type为amount时有效）
     */
    @Excel(name = "使用该优惠券所需的最低订单金额", readConverterExp = "仅=当discount_type为amount时有效")
    private BigDecimal minimumOrderAmount;

    /**
     * 总发放数量
     */
    @Excel(name = "总发放数量")
    private Long totalQuantity;

    /**
     * 剩余可领取数量
     */
    @Excel(name = "剩余可领取数量")
    private Long remainingQuantity;

    /**
     * 是否适用于所有商品
     */
    @Excel(name = "是否适用于所有商品")
    private Integer validForAllProducts;

    /**
     * 适用特定商品ID列表（仅当valid_for_all_products为false时有效）
     */
    @Excel(name = "适用特定商品ID列表", readConverterExp = "仅=当valid_for_all_products为false时有效")
    private String specificProductIds;

    /**
     * 过期日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "过期日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date expirationDate;


}
